package py.cursoweb.controller;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import py.cursoweb.model.Producto;



public class ProductoManager {
	//Datos de prueba .... aun no conecta a base de datos
	private static ArrayList<Producto> productos = null;
	
	public ProductoManager() {
		if (productos == null) {
			productos = new ArrayList<Producto>();
		}
	}
	
	public List<Producto> getProductos() throws Exception {
		Session session = getSession();
		Transaction trans = session.beginTransaction();
		List<Producto> productos;
		
		try {			
			productos = session.createQuery("from Producto").list();
			trans.commit(); 
		}catch(Exception ex) {
			ex.printStackTrace();
			trans.rollback();
			
			throw ex;
		}			 
		
		return productos;
	}
	
	public void addProducto(Producto producto) {
		productos.add(producto);
	}
	
	public Producto getProducto(Integer id) {
		try {
			productos = (ArrayList<Producto>) this.getProductos();
			for(Producto producto : productos) {
				if (producto.getId().equals(id))
					return producto;
			}
		}catch (Exception e){
			return null;
		}
		return null;
	}
	
	
	//acceso a base de datos
	public void saveProducto(Producto producto) throws Exception {
		Session session = getSession();
		Transaction trans = session.beginTransaction();
		
		try {			
			session.saveOrUpdate(producto);
			trans.commit();
		}catch(Exception ex) {
			ex.printStackTrace();
			trans.rollback();
			
			throw ex;
		}			
	}
	
	public void deleteProducto(Producto producto) throws Exception {
		Session session = getSession();
		Transaction trans = session.beginTransaction();
		
		try {			
			session.delete(producto);
			trans.commit();
		}catch(Exception ex) {
			ex.printStackTrace();
			trans.rollback();
			
			throw ex;
		}			
	}
	
	public Session getSession() {
		return HibernateUtil.getSessionFactory().getCurrentSession();
	}


}
